package com.ywger.integration.resttemplate.inteceptor;

import org.springframework.http.HttpStatus;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.web.client.DefaultResponseErrorHandler;

import java.io.IOException;

/**
 * @author chenmeng
 * @date 2021-07-17 16:41
 * @desc restTemplate 返回错误代码处理
 * 注意：请求有了返回，或者有错误代码才会进入该类。
 * 连接超时等情况不会进入这里
 */
public class RestRespErrorHandler extends DefaultResponseErrorHandler {

    /**
     * @param response
     * @return
     * @throws IOException
     * 重写根据状态码判断是否有http请求错误。对于本系统 状态码不为200 则都作为异常情况处理
     * 默认处理方式，只有4XX 和5XX 状态码认为是异常状态码
     */
    @Override
    public boolean hasError(ClientHttpResponse response) throws IOException {
        HttpStatus statusCode = response.getStatusCode();
        if(HttpStatus.OK.equals(statusCode)){
            return false;
        }

        return true;
    }

    /**
     * 错误处理
     * @param response
     * @throws IOException
     * 当上述hasError方法返回true时，会通过该方法处理。
     * 使用默认处理方式。
     * 之前默认处理4XX和5XX错误码，并转换成对应异常类抛出。
     * 由于现在是除200 状态码以外抛出异常。4XX和5XX错误码，按原方式抛出异常。 其它错误码会以UnknownHttpStatusCodeException抛出
     */
    @Override
    public void handleError(ClientHttpResponse response) throws IOException {
       super.handleError(response);
    }
}
